1 package edu.jiangxin.apktoolbox.convert.protobuf.unsupervised; 2 3 import edu.jiangxin.apktoolbox.swing.extend.EasyPanel; 4 import edu.jiangxin.apktoolbox.utils.Constants; 5 import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea; 6 import org.fife.ui.rsyntaxtextarea.SyntaxConstants; 7 import org.fife.ui.rtextarea.RTextScrollPane; 8 9 import javax.swing.*; 10 import java.awt.*; 11 import java.io.Serial; 12 13 public class UnsupervisedProtobufConvertPanel extends EasyPanel { 14 @Serial 15 private static final long serialVersionUID = 1L; 16 17 private JPanel contentPanel; 18 19 private JPanel operationPanel; 20 21 private JTextArea inputTextArea; 22 private RSyntaxTextArea outputTextArea; 23 24 @Override 25 public void initUI() { 26 BoxLayout boxLayout = new BoxLayout(this, BoxLayout.Y_AXIS); 27 setLayout(boxLayout); 28 29 createContentPanel(); 30 add(contentPanel); 31 add(Box.createVerticalStrut(Constants.DEFAULT_Y_BORDER)); 32 33 createOperationPanel(); 34 add(operationPanel); 35 } 36 37 private void createContentPanel() { 38 contentPanel = new JPanel(); 39 40 BoxLayout boxLayout = new BoxLayout(contentPanel, BoxLayout.X_AXIS); 41 contentPanel.setLayout(boxLayout); 42 43 inputTextArea = new JTextArea(); 44 inputTextArea.setLineWrap(true); 45 inputTextArea.setWrapStyleWord(true); 46 inputTextArea.setText("0a2f0a084a6f686e20446f6510011a106a6f686e406578616d706c652e636f6d220f0a0b3131312d3232322d33333310010a1e0a084a616e6520446f6510021a106a616e65406578616d706c652e636f6d"); 47 48 JScrollPane inputScrollPanel = new JScrollPane(inputTextArea); 49 inputScrollPanel.setPreferredSize(new Dimension(200, 500)); 50 51 outputTextArea = new RSyntaxTextArea(); 52 outputTextArea.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_JSON); 53 outputTextArea.setCodeFoldingEnabled(true); 54 outputTextArea.setEditable(false); 55 56 RTextScrollPane outputScrollPane = new RTextScrollPane(outputTextArea); 57 outputScrollPane.setPreferredSize(new Dimension(200, 500)); 58 59 contentPanel.add(inputScrollPanel); 60 contentPanel.add(Box.createHorizontalStrut(Constants.DEFAULT_X_BORDER)); 61 contentPanel.add(outputScrollPane); 62 } 63 64 private void createOperationPanel() { 65 operationPanel = new JPanel(); 66 67 BoxLayout boxLayout = new BoxLayout(operationPanel, BoxLayout.X_AXIS); 68 operationPanel.setLayout(boxLayout); 69 70 JButton convertButton = new JButton("Convert"); 71 72 convertButton.addActionListener(e -> convertProtoToJson()); 73 74 operationPanel.add(convertButton); 75 } 76 77 private void convertProtoToJson() { 78 String hexString = inputTextArea.getText(); 79 byte[] byteArray = ByteUtil.hex2bytes(hexString); 80 String jsonString = ProtobufDecoder.bytesDecoder(byteArray); 81 outputTextArea.setText(jsonString); 82 } 83 }